package com.chensf.studydemo.guide.design

import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.ViewConfiguration
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout

class MySwipeLayout : SwipeRefreshLayout {
    private var startX = 0f
    private var startY = 0f
    private var mIsXMove=false // 是否横向拖拽
    private var mTouchSlop=0 // getScaledTouchSlop()得来的一个距离，表示滑动的时候，手势移动要大于这个距离才开始移动控件，ViewPager就是用这个距离来判断用户是否翻页


    constructor(context: Context) : this(context, null)
    constructor(context: Context, attributeSet: AttributeSet?) : super(context, attributeSet){
        mTouchSlop = ViewConfiguration.get(context).scaledTouchSlop;
    }

    override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        val action = ev!!.action
        when (action) {
            MotionEvent.ACTION_DOWN -> {
                mIsXMove = false
                startX = ev.x
                startY = ev.y
            }
            MotionEvent.ACTION_MOVE -> {
                // 如果横向移动则不拦截，直接return false；
                if (mIsXMove) {
                    return false
                }
                val endX = ev.x
                val endY = ev.y
                val distanceX = Math.abs(endX - startX)
                val distanceY = Math.abs(endY - startY)
                // 如果dx>xy，则认定为左右滑动，将事件交给viewPager处理，return false
                if (distanceX > mTouchSlop && distanceX > distanceY) {
                    mIsXMove = true
                    return false
                }
            }
            MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> mIsXMove = false
        }
        // 如果dy>dx，则认定为下拉事件，交给swipeRefreshLayout处理并拦截
        // 如果dy>dx，则认定为下拉事件，交给swipeRefreshLayout处理并拦截
        return super.onInterceptTouchEvent(ev)
    }

}